// Copyright (c) 2025 Shenzhen Kaihong Digital Industry Development Co., Ltd.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

use maestro_derive::MsgTag;
use ohmw_derive::{Decode, Encode};

#[derive(Encode, Decode, MsgTag)]
#[msg_tag(case = "snake_case")]
pub struct GetFileRet {
    pub file_path: String,
    pub success: bool,
    pub content: Vec<u8>,
}

pub async fn get_file(file_path: &str) -> GetFileRet {
    let path = std::path::Path::new(file_path);
    if !path.exists() {
        return GetFileRet {
            file_path: file_path.to_string(),
            success: false,
            content: b"file not exists".to_vec(),
        };
    }

    match tokio::fs::read(&path).await {
        Ok(content) => GetFileRet {
            file_path: file_path.to_string(),
            success: true,
            content,
        },
        Err(e) => GetFileRet {
            file_path: file_path.to_string(),
            success: false,
            content: format!("read file error: {}", e).as_bytes().to_vec(),
        },
    }
}